維運 EKS 最常遇到的就是每年的更版,尤其這幾年更版速度更是加快,可以看到光2024 就有四個版本要 end of support,改版要注意的事項我們可以在 AWS 官方 看到提醒事項,
這次來分享一些升級到 1.25 的經驗,這次最大的改版是PodSecurityPolicy
(PSP) 要被移除了。 PSP 會被 Pod Security Admission (PSA) 和 Pod Security Standards (PSS) 取代。PSA 和 PSS 在 Amazon EKS 1.25 中默認啟用
PSP 是對集群内 Pods 實行安全策略
PSA 所實現的具體安全控制標準
一個 Built-in admission controller,實現 PSS 中描述的安全控制
如果現階段有使用 PSP,官方建議兩種方法
查看目前環境的 PSP,看看有沒有需要 migrate 的 policy
$ kubectl get psp
NAME PRIV CAPS SELINUX RUNASUSER FSGROUP SUPGROUP READONLYROOTFS VOLUMES
aws-cloudwatch-logs-aws-for-fluent-bit false RunAsAny RunAsAny MustRunAs MustRunAs false configMap,secret,hostPath,projected
eks.privileged true * RunAsAny RunAsAny RunAsAny RunAsAny false *
kube-state-metrics false RunAsAny MustRunAs MustRunAs MustRunAs false secret
eks.privileged
這個是1.13 - 1.24 default 的 PSP,不需要處理它,會在 1.25 自動改掉。我們先從 Kube-state-metrics 開始研究
KSM 是 Kubernetes 的工具,可以用來提供 cluster 狀態指標。
首先我們先判斷現有架構部署的文件,會發現並沒有額外進行多餘的設定。
resource "helm_release" "kube_state_metrics" {
name = "kube-state-metrics"
repository = "https://charts.bitnami.com/bitnami"
chart = "kube-state-metrics"
version = "1.2.4"
namespace = "kube-system"
}
我們來看一下現有的設定跟官方預設設定是否一樣,再次確保我們的設定在前人的手中並無調整過
$ k describe psp kube-state-metrics
Warning: policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+
Name: kube-state-metrics
Namespace:
Labels: app.kubernetes.io/instance=kube-state-metrics
app.kubernetes.io/managed-by=Helm
app.kubernetes.io/name=kube-state-metrics
helm.sh/chart=kube-state-metrics-1.2.4
Annotations: meta.helm.sh/release-name: kube-state-metrics
meta.helm.sh/release-namespace: kube-system
API Version: policy/v1beta1
Kind: PodSecurityPolicy
Metadata:
Creation Timestamp: 2021-04-29T04:16:16Z
Resource Version: 26373459
UID: bbd5eb31-4222-4110-88d4-44e03d9216ff
Spec:
Allow Privilege Escalation: true
Fs Group:
Ranges:
Max: 1001
Min: 1001
Rule: MustRunAs
Run As User:
Ranges:
Max: 1001
Min: 1001
Rule: MustRunAs
Se Linux:
Rule: RunAsAny
Supplemental Groups:
Ranges:
Max: 1001
Min: 1001
Rule: MustRunAs
Volumes:
secret
Events: <none>
# https://artifacthub.io/packages/helm/bitnami/kube-state-metrics?modal=template&template=psp.yaml
{{- /*
Copyright VMware, Inc.
SPDX-License-Identifier: APACHE-2.0
*/}}
{{- $pspAvailable := (semverCompare "<1.25-0" (include "common.capabilities.kubeVersion" .)) -}}
{{- if and $pspAvailable .Values.rbac.create .Values.rbac.pspEnabled }}
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: {{ template "common.names.fullname.namespace" . }}
namespace: {{ include "common.names.namespace" . | quote }}
labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
spec:
privileged: false
volumes:
- 'secret'
hostNetwork: {{ .Values.hostNetwork }}
hostIPC: false
hostPID: false
runAsUser:
rule: 'MustRunAs'
ranges:
- min: 1001
max: 1001
seLinux:
rule: 'RunAsAny'
supplementalGroups:
rule: 'MustRunAs'
ranges:
- min: 1001
max: 1001
fsGroup:
rule: 'MustRunAs'
ranges:
- min: 1001
max: 1001
readOnlyRootFilesystem: false
{{- end }}
基本上是一樣的。而在官方設定上也會發現如果版本 <1.25 他才會啟用psp create 這個動作,所以可以判斷我們將直接將此版本升級到官方最新支援版本
至於要升到哪個版本呢,雖然 Bitnami 官方提到
但我前往 kube-state-metrics 官方查看,發現他們有建議不同的 K8s version,選擇相對應的版本,而我們要升級的1.25 為 KSM v2.7.0,所以我們要來找 bitnami相對安裝版本,也就是3.2.8